home *** CD-ROM | disk | FTP | other *** search
- ; In 1.1 : execute a command in a certain directory.
- ; by Kyzer/CSG
- ; $VER: In.asm 1.1 (09.04.98)
- ;
- incdir include:
- include lvo/exec_lib.i
- include lvo/dos_lib.i
- include dos/dos.i
-
- stackf MACRO ; stack_symbol, stackelement_symbol
- IFND \1
- \1 set 0
- ENDC
- \1 set \1-4
- \2 equ \1
- ENDM
-
- stackf stk, cmd ; these two filled
- stackf stk, dir ; by ReadArgs()
- stackf stk, rdargs ; result of ReadArgs()
- stackf stk, fib ; FileInfoBlock
- arg=dir
-
- In link a5,#stk
- move.l 4.w,a6
- moveq #20,d6
- lea dosname(pc),a1 ; dos.library v37+
- moveq.l #37,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,a6
- tst.l d0
- beq .nodos
-
- lea templat(pc),a0
- move.l a0,d1
- lea arg(a5),a0
- move.l a0,d2
- clr.l (a0)+
- clr.l (a0)+
- moveq #0,d3
- jsr _LVOReadArgs(a6)
- move.l d0,rdargs(a5)
- beq.s .noargs
-
- moveq #DOS_FIB,d1
- moveq #0,d2
- jsr _LVOAllocDosObject(a6)
- move.l d0,fib(a5)
- beq.s .nofib
-
- move.l dir(a5),d1
- moveq #ACCESS_READ,d2
- jsr _LVOLock(a6)
- move.l d0,d7
- move.l d0,d1
- beq.s .nolock
- move.l fib(a5),d2
- jsr _LVOExamine(a6)
- move.l d7,d1
- tst.l d0
- beq.s .noexam
-
- move.l fib(a5),a0
- tst.l fib_DirEntryType(a0)
- bgt.s .isdir
- move.l #ERROR_OBJECT_WRONG_TYPE,d1
- jsr _LVOSetIoErr(a6)
- bra.s .notdir
-
- .isdir move.l d7,d1
- jsr _LVOCurrentDir(a6)
- move.l d0,d7
-
- move.l cmd(a5),d1
- moveq #0,d2
- jsr _LVOSystemTagList(a6)
- move.l d0,d6
-
- move.l d7,d1
- jsr _LVOCurrentDir(a6)
- move.l d0,d1
- .notdir
- .noexam jsr _LVOUnLock(a6)
- .nolock moveq #DOS_FIB,d1
- move.l fib(a5),d2
- jsr _LVOFreeDosObject(a6)
- .nofib
-
- .noargs move.l rdargs(a5),d1
- bne.s .argsok
- lea info(pc),a0
- move.l a0,d1
- jsr _LVOPutStr(a6) ; put info if args failed
- move.l rdargs(a5),d1
- .argsok jsr _LVOFreeArgs(a6)
- jsr _LVOIoErr(a6)
- move.l d0,d1
- moveq #0,d2
- jsr _LVOPrintFault(a6)
- move.l a6,a1
- move.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
- .nodos move.l d6,d0
- unlk a5
- rts
-
- dosname dc.b "dos.library",0
- templat dc.b "DIRECTORY/A,DO=COMMAND/A/F",0
- dc.b "$VER: "
- info dc.b "In 1.1 (09.04.98) by Kyzer/CSG",10
- dc.b "Usage: in <directory> do <command>",10,10,0
-